<!DOCTYPE HTML>
<html>

<head>
	<link rel="bookmark"  type="image/x-icon"  href="/img/logo_miccall.png"/>
	<link rel="shortcut icon" href="/img/logo_miccall.png">
	
			    <title>
    Ame雨
    </title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
    <link rel="stylesheet" href="/amelin-ting/css/mic_main.css" />
    <link rel="stylesheet" href="/amelin-ting/css/dropdownMenu.css" />
    <meta name="keywords" content="Ame雨" />
    
    	<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
	 
    <noscript>
        <link rel="stylesheet" href="/amelin-ting/css/noscript.css" />
    </noscript>
    <style type="text/css">
        body:before {
          content: ' ';
          position: fixed;
          top: 0;
          background: url('/amelin-ting/img/bg.jpg') center 0 no-repeat;
          right: 0;
          bottom: 0;
          left: 0;
          background-size: cover; 
        }
    </style>

			    
  
    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({
        tex2jax: {
          inlineMath: [ ['$','$'], ["\\(","\\)"]  ],
          processEscapes: true,
          skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
        }
      });
    </script>

    <script type="text/x-mathjax-config">
      MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for (i=0; i < all.length; i += 1) {
          all[i].SourceElement().parentNode.className += ' has-jax';
        }
      });
    </script>
    <script async type="text/javascript" src="//cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
  


    <script src="/amelin-ting/js/jquery.min.js"></script>
    <script src="/amelin-ting/js/jquery.scrollex.min.js"></script>
    <script src="/amelin-ting/js/jquery.scrolly.min.js"></script>
    <script src="/amelin-ting/js/skel.min.js"></script>
    <script src="/amelin-ting/js/util.js"></script>
    <script src="/amelin-ting/js/main.js"></script>
	
<meta name="generator" content="Hexo 5.4.0"></head>
    
		
<!-- Layouts -->



<!--  代码渲染  -->
<link rel="stylesheet" href="/css/prism_coy.css" />
<link rel="stylesheet" href="/css/typo.css" />
<!-- 文章页 -->
<body class="is-loading">
    <!-- Wrapper 外包 s-->
    <div id="wrapper" class="fade-in">
        <!-- Intro 头部显示 s -->
        <!-- Intro 头部显示 e -->
        <!-- Header 头部logo start -->
        <header id="header">
    <a href="/amelin-ting/" class="logo">Art Space</a>
</header>
        <!-- Nav 导航条 start -->
        <nav id="nav" class="special" >
            <ul class="menu links" >
			<!-- Homepage  主页  --> 
			<li >
	            <a href="/amelin-ting/" rel="nofollow">主页</a>
	        </li>
			<!-- categories_name  分类   --> 
	        
	        <li class="active">
	            <a href="#s1">分类</a>
	                    <ul class="submenu">
	                        <li>
	                        <a class="category-link" href="/amelin-ting/categories/Go/">Go</a></li><li><a class="category-link" href="/amelin-ting/categories/django/">django</a></li><li><a class="category-link" href="/amelin-ting/categories/drf/">drf</a></li><li><a class="category-link" href="/amelin-ting/categories/gin/">gin</a></li><li><a class="category-link" href="/amelin-ting/categories/go/">go</a></li><li><a class="category-link" href="/amelin-ting/categories/linux/">linux</a></li><li><a class="category-link" href="/amelin-ting/categories/mysql/">mysql</a></li><li><a class="category-link" href="/amelin-ting/categories/python/">python</a></li><li><a class="category-link" href="/amelin-ting/categories/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/">内网穿透</a></li><li><a class="category-link" href="/amelin-ting/categories/%E5%89%8D%E7%AB%AF/">前端</a>
	                    </ul>
	        </li>
	        
	        <!-- archives  归档   --> 
	        
	        
		        <!-- Pages 自定义   -->
		        
		        <li>
		            <a href="/about/" title="简历">
		                简历
		            </a>
		        </li>
		        
		        <li>
		            <a href="/group/" title="团队">
		                团队
		            </a>
		        </li>
		        
		        <li>
		            <a href="/gallery/" title="图库">
		                图库
		            </a>
		        </li>
		        
		        <li>
		            <a href="/tag/" title="标签">
		                标签
		            </a>
		        </li>
		        


            </ul>
            <!-- icons 图标   -->
			<ul class="icons">
                    
                    <li>
                        <a title="github" href="https://github.com/miccall" target="_blank" rel="noopener">
                            <i class="icon fa fa-github"></i>
                        </a>
                    </li>
                    
                    <li>
                        <a title="500px" href="http://500px.com" target="_blank" rel="noopener">
                            <i class="icon fa fa-500px"></i>
                        </a>
                    </li>
                    
			</ul>
</nav>

        <div id="main" >
            <div class ="post_page_title_img" style="height: 25rem;background-image: url(https://img2.baidu.com/it/u=1622485378,2502530676&amp;fm=26&amp;fmt=auto);background-position: center; background-repeat:no-repeat; background-size:cover;-moz-background-size:cover;overflow:hidden;" >
                <a href="#" style="padding: 4rem 4rem 2rem 4rem ;"><h2 >计算机略详细基础</h2></a>
            </div>
            <!-- Post -->
            <div class="typo" style="padding: 3rem;">
                <h1 id="网络编程基础"><a href="#网络编程基础" class="headerlink" title="网络编程基础"></a>网络编程基础</h1><h2 id="一、CS-与-BS"><a href="#一、CS-与-BS" class="headerlink" title="一、CS 与 BS"></a>一、CS 与 BS</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1.</span>CS 客户端与服务端之间的关系</span><br><span class="line"><span class="number">2.</span>BS 浏览器与服务端之间的关系</span><br><span class="line"><span class="comment"># C/S架构与socket的关系：</span></span><br><span class="line">    我们学习socket就是为了完成C/S架构的开发</span><br></pre></td></tr></table></figure>

<h2 id="二、什么是网络？"><a href="#二、什么是网络？" class="headerlink" title="二、什么是网络？"></a>二、什么是网络？</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">网络=物理连接介质+互联网通信协议</span><br><span class="line"><span class="comment"># OSI七层协议</span></span><br><span class="line">     应用层</span><br><span class="line">     表示层</span><br><span class="line">     会话层</span><br><span class="line">     传输层</span><br><span class="line">     网络层</span><br><span class="line">     数据链路层</span><br><span class="line">     物理层</span><br><span class="line"><span class="comment"># 又可以分为5层 将应用层 表示层 会话层合在了一起</span></span><br><span class="line">	 应用层</span><br><span class="line">     传输层</span><br><span class="line">     网络层</span><br><span class="line">     数据链路层</span><br><span class="line">     物理层</span><br><span class="line"><span class="comment"># 其实还是可以在分为4层，将 数据链路层和物理层合为了物理层，但是我们主要研究5层就好了</span></span><br></pre></td></tr></table></figure>

<h2 id="三、为什么要有网络"><a href="#三、为什么要有网络" class="headerlink" title="三、为什么要有网络"></a>三、为什么要有网络</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 为了方便数据的传输/通信，之前叫信息高速公路，现在叫互联网</span></span><br></pre></td></tr></table></figure>

<h2 id="四、物理层"><a href="#四、物理层" class="headerlink" title="四、物理层"></a>四、物理层</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 功能：主要是基于电器特性发送高低电压，高电压对应数字1，低电压对应数字0</span></span><br></pre></td></tr></table></figure>

<h2 id="五、数据链路层"><a href="#五、数据链路层" class="headerlink" title="五、数据链路层"></a>五、数据链路层</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">数据链路层由来：单纯的电信号<span class="number">0</span>和<span class="number">1</span>没有任何意义，必须规定电信号多少位一组，每组什么意思，每个组称为帧</span><br><span class="line"><span class="comment"># 数据链路层的功能：定义了电信号的分组方式</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">	在这一层最重要就是Mac地址，假如从物理层传递来一组数据，然后数据链路层就会给这一层数据变成两个部分------头部和数据</span></span><br><span class="line"><span class="string">头部是由固定的18个字节组成的，6个字节标记着源主机的Mac地址，6个字节标记着目标主机的Mac地址，还有6个字节是数据类型</span></span><br><span class="line"><span class="string">然后数据部分就是数据，数据链路层就把数据打包成了这样</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br></pre></td></tr></table></figure>

<h3 id="1、以太网协议"><a href="#1、以太网协议" class="headerlink" title="1、以太网协议"></a>1、以太网协议</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在数据链路层 支持的是以太网协议</span></span><br><span class="line">早期的时候各个公司都有自己的分组方式，后来形成了统一的标准，即以太网协议ethernet</span><br><span class="line">ethernet规定：</span><br><span class="line"><span class="comment"># 1.一组电信号构成一个数据包，叫做&#x27;帧&#x27;</span></span><br><span class="line"><span class="comment"># 2.每一数据帧分成：报头head和数据data两部分</span></span><br><span class="line">head包含：（固定<span class="number">18</span>个字节）</span><br><span class="line">发送者/源地址，<span class="number">6</span>个字节</span><br><span class="line">接收者/目标地址：<span class="number">6</span>个字节</span><br><span class="line">数据类型：<span class="number">6</span>个字节</span><br><span class="line">data包含：最短<span class="number">46</span>字节，最长<span class="number">1500</span>字节</span><br><span class="line">数据包的具体内容：</span><br><span class="line">head长度+data长度=最短<span class="number">64</span>字节，最长<span class="number">1518</span>字节，超过最大限制就分片发送</span><br><span class="line"></span><br><span class="line"><span class="number">1.</span>以太数据称之为数据帧，分为head+data两部分，其head长度固定</span><br><span class="line"><span class="number">2.</span>规定但凡是接入互联网的主机必须有一块网卡，网卡上有一个mac地址，且世界唯一</span><br><span class="line"><span class="number">3.</span>以太网协议的通信采用的是广播的通信方式==》计算机通信靠吼</span><br></pre></td></tr></table></figure>

<h3 id="2、mac地址"><a href="#2、mac地址" class="headerlink" title="2、mac地址"></a>2、mac地址</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 头部中包含的源和目标地址由来：ethernet规定接入internet的设备都必须具备网卡，发送端和接受端的地址便是指网卡的地址，即mac地址</span></span><br><span class="line"><span class="comment"># mac地址：每块网卡出厂时都被烧制上一个世界唯一的mac地址，长度为48位2进制，通常由12位16进制数表示（前六位是厂商编号，后六位是流水线号）</span></span><br></pre></td></tr></table></figure>

<h3 id="3、广播"><a href="#3、广播" class="headerlink" title="3、广播"></a>3、广播</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">有了mac地址，同一网络内的两台主机就可以通信了（一台主机通过arp协议获取另外一台主机的mac地址）</span><br><span class="line"><span class="comment">#  ethernet采用最原始的方式，广播的方式进行通信，既计算机通信基本靠吼。</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">	计算机通讯为什么叫吼呢，是因为比如局域网中，我向目标主机发送了数据，然后到了交换机，然后就开始像广播一样通知到了局域网内每一个计算机，然后每个计算机通过Mac地址来判断是不是自己要接受这个数据，不是自己就把包扔掉，正因为通知到了每一个计算机，所以就是广播----吼，那是不是每次都需要吼呢，答案是不是的，交换机有个记忆Mac地址的功能，当他的Mac记忆表没有这个Mac地址的时候 才会吼</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br></pre></td></tr></table></figure>

<h2 id="六、网络层"><a href="#六、网络层" class="headerlink" title="六、网络层"></a>六、网络层</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">网络的由来：有了ethernet、mac地址、广播的发送方式，世界上的计算机就可以彼此通信了，问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的，那么如果所有的通信都采用以太网的广播方式，那么一台机器发送的包全世界都会收到，这就不仅仅是效率低的问题，这会是一种灾难</span><br></pre></td></tr></table></figure>

<h3 id="1-IP协议"><a href="#1-IP协议" class="headerlink" title="1.IP协议"></a>1.IP协议</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">规定网络地址的协议叫ip协议，它定义的地址称之为ip地址，广泛的采用的v4版本既ipv4，规定网络地址由<span class="number">32</span>位<span class="number">2</span>进制表示</span><br><span class="line">范围：<span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span>-<span class="number">255.255</span><span class="number">.255</span><span class="number">.255</span></span><br><span class="line">一个ip地址通常携程四段十进制数：例如 <span class="number">172.16</span><span class="number">.10</span><span class="number">.1</span></span><br><span class="line"><span class="comment"># ip地址分成两部分：</span></span><br><span class="line">    网络部分：标识子网</span><br><span class="line">    主机部分：标识主机</span><br><span class="line">注意：单纯的ip地址段只是标识了ip地址的种类，从网络部分或主机部分都无法辨识一个ip所处的子网</span><br><span class="line">例：<span class="number">172.16</span><span class="number">.10</span><span class="number">.1</span>与<span class="number">172.16</span><span class="number">.10</span><span class="number">.2</span>并不能确定二者处于同一个子网</span><br><span class="line"><span class="comment">#  IP+MAC+端口=》标识全世界范围内独一无二的一个基于网络通信的软件</span></span><br><span class="line"><span class="comment"># IPV4目前主流，地址不够用了，正在推IPV6</span></span><br></pre></td></tr></table></figure>

<h3 id="2-子网掩码"><a href="#2-子网掩码" class="headerlink" title="2.子网掩码"></a>2.子网掩码</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">所谓 子网掩码 ，就是标识自网络特征的一个参数。它在形式上等同于ip地址，也是一个<span class="number">32</span>位二进制数字，它的网络部分全部位<span class="number">1</span>，主机部分全部位<span class="number">0</span>。比如，ip地址<span class="number">172.16</span><span class="number">.10</span><span class="number">.1</span>，如果已知网络部分是前<span class="number">23</span>位，主机部分是后<span class="number">8</span>位，那么子网掩码就是：<span class="number">11111111.11111111</span><span class="number">.11111111</span><span class="number">.00000000</span>，写成十进制就是<span class="number">255.255</span><span class="number">.255</span><span class="number">.0</span></span><br><span class="line">知道 子网掩码 我们就能判断，任意两个ip地址是否处在同一个子网络(局域网)。方式是将两个ip地址与子网掩码分别进行AND运算（两个数位都为<span class="number">1</span>，运算结果为<span class="number">1</span>，否则为<span class="number">0</span>）然后比较结果是否相同，如果是的话，就表明它们在同一个子网络中，否则就不是</span><br><span class="line"><span class="comment"># 总结：ip协议的主要作用主要是有两个，一个是为每一台计算机分配ip地址，另一个是确定那些地址在同一个子网络</span></span><br></pre></td></tr></table></figure>

<h3 id="3-IP数据包"><a href="#3-IP数据包" class="headerlink" title="3.IP数据包"></a>3.IP数据包</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">ip数据包也分为head和data部分，无须为ip包定义单独的栏位，直接放入以太网包的data部分</span><br><span class="line">head：长度为<span class="number">20</span>-<span class="number">60</span>字节</span><br><span class="line">data：最长为<span class="number">65515</span>字节</span><br><span class="line">以太网数据包的<span class="string">&#x27;数据&#x27;</span>部分，最长只有<span class="number">1500</span>字节，因此，如果ip数据包超过了<span class="number">1500</span>字节，它就需要分割成几个以太网数据包，分开发送了</span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">	网络层也会去封装一个头，这个头则主要是IP地址，头里面会包括本主机的IP地址和目标主机的IP地址，IP地址是会转化成Mac地址，具体因为ARP协议，这个我们稍后再说</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br></pre></td></tr></table></figure>

<h3 id="4-ARP协议"><a href="#4-ARP协议" class="headerlink" title="4.ARP协议"></a>4.ARP协议</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">arp协议的由来：计算机通信基本靠吼，既广播的方式，所有上层的包到最后都要封装上以太网头，然后通过以太网协议发送，在谈及以太网协议的时候，我们了解到，通信时基于mac 的广播方式实现，计算机在发包时，获取自身的mac时容易的，如何获取目标主机的mac，就需要通过arp协议</span><br><span class="line"><span class="comment"># arp协议功能：广播的方式发送数据包，获取目标主机的mac地址</span></span><br><span class="line"><span class="comment"># 协议工作方式：每台主机ip都是已知的</span></span><br><span class="line">工作方式：</span><br><span class="line"><span class="number">1.</span>首先通过ip地址和子网掩码区分出自己所处的子网</span><br><span class="line"><span class="number">2.</span>如果处于同一网络，通过arp获取网关的mac地址</span><br><span class="line"><span class="number">3.</span>这个包会以广播的方式在发送端所处的子网内传输，所有主机接收后拆开包，发现目标ip为自己的，就响应，返回自己的mac地址。</span><br><span class="line"></span><br><span class="line"><span class="number">1.</span>通信的第一步先拿到目标主机的ip地址</span><br><span class="line"><span class="number">2.</span>判断出目标主机与自己是否在一个子网里</span><br><span class="line"><span class="comment"># 如果在一个子网里，数据包的走向：   </span></span><br><span class="line">	源主机---》本地交换机---》目标主机</span><br><span class="line"><span class="comment"># 如果不在一个子网里，数据包的走向：</span></span><br><span class="line">	源主机---》本地交换机---》本地路由器---》公网---》目标路由器---》目标交换机---》目标主机</span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">	如果在一个子网里 源主机想传给目标主机一段数据，知道自己的IP地址但是不知道目标主机的Mac只知道目标的IP，就会将这段数据去打包，目标的Mac地址写为FF.FF.FF.FF，传给交换机，交换机因为懂ARP协议所以看到目标的Mac地址是这样的就立刻懂了，大吼一声，传给所有的计算机，计算机也都懂ARP协议啊，看到这个Mac格式 就会分析IP地址是不是他自己，不是则把包丢掉，是就接受这段数据，这就是如果在一个子网里，数据包的走向具体流程</span></span><br><span class="line"><span class="string">	如果不在一个子网，源主机想传给目标主机一段数据，知道自己的IP地址但是不知道目标主机的Mac只知道目标的IP，就会将这段数据去打包，目标的Mac地址写为FF.FF.FF.FF，传给交换机，交换机发现这个不在局域网里面，便传给网关----路由器，注意，路由器这里就传到公网，把Mac地址换成了网关的Mac地址，然后再去传输到目标的局域网，通过IP地址转化成Mac地址去寻找目标主机</span></span><br><span class="line"><span class="string">	IP地址能转换成Mac地址 都是因为ARP协议的功劳</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br></pre></td></tr></table></figure>

<h2 id="七、传输层"><a href="#七、传输层" class="headerlink" title="七、传输层"></a>七、传输层</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">传输层的由来：网络层的ip帮我们区分子网，以太网层的mac帮我们找到主机，然后大家使用的都是应用程序，你的电脑上可能同时开启QQ，暴风影音，等多个应用程序。</span><br><span class="line">我们通过ip和mac找到了一台特定的主机，如何标识这台主机上都要应用程序，答案就是端口，端口既应用程序与网卡关联的编号</span><br><span class="line"><span class="comment">#   传输层的功能：建立端口到端口的通信</span></span><br><span class="line">端口范围<span class="number">0</span>-<span class="number">65535</span>，<span class="number">0</span>-<span class="number">1023</span>为系统占用端口</span><br></pre></td></tr></table></figure>

<h3 id="1-TCP协议"><a href="#1-TCP协议" class="headerlink" title="1. TCP协议"></a>1. TCP协议</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">	可靠传输，TCP数据包没有长度限制，理论上可以无限长，但是为了保证网络的效率，通常TCP数据包的长度不会超过IP数据包的长度，以确保单个TCP数据包不必再分割</span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">	TCP协议为什么说是可靠的协议，因为C(客户端)----------------S(服务端)的传输中，C传输了一个请求，S必有回应，所以才说是可靠的协议，那么具体的请求流程是什么样子的呢</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line">	<span class="comment"># 三次握手连接</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">	C向S发送了请求，询问能不能建立连接通道，S同意了，然后S向C也发送了请求，C也同意了，但是大家会纳闷，这不是4次握手嘛，因为中间有两次都是S向C发送了请求，所以说把这两次都合在了一块，同时发送了，所以就是三次握手连接</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span>    </span><br><span class="line">	<span class="comment"># 4次握手断开连接</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">	在C和S建立好互相连接的时候，S或者C就会向对方发出断开连接的请求，所以对方也会同意，但是这次不能同意的时候也发出断开最后连接的请求，因为这个时候可能最后的连接还在传输数据，等传输彻底结束后，就会发送断开最后连接的请求，这个时候在同意，就彻底断开连接了</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line">    <span class="comment"># 半连接池</span></span><br></pre></td></tr></table></figure>

<h3 id="2-udp-协议"><a href="#2-udp-协议" class="headerlink" title="2. udp 协议"></a>2. udp 协议</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">不可靠传输， 报头 部分一共只有<span class="number">8</span>个字节，总长度不超过<span class="number">65535</span>字节，正好放进一个ip数据包</span><br></pre></td></tr></table></figure>

<h2 id="八、应用层"><a href="#八、应用层" class="headerlink" title="八、应用层"></a>八、应用层</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">应用层由来：用户使用的都是应用程序，均工作应用层，互联网是开发的，大家都可以开发自己的应用程序，数据多种多样，必须规定好数据的组织形式</span><br><span class="line"><span class="comment">#  应用层功能：规定应用程序的数据格式</span></span><br><span class="line">例：TCP协议可以为各种各样的程序传递数据，比如Email，WWWW，FTP等等。那么，必须有不同协议规定电子邮件，网页，ftp数据的格式，这些应用程序协议就构成了应用层</span><br></pre></td></tr></table></figure>

<h3 id="1-socket（套接字）"><a href="#1-socket（套接字）" class="headerlink" title="1.socket（套接字）"></a>1.socket（套接字）</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#套接字   socket  将传输层，网络层，数据链路层，物理层封装端口，只专心研发应用程序</span></span><br><span class="line">我们知道，两个进程如果需要进行通讯，最基本的一个前提，以为的标识一个进程，再本地进程通讯中，我们可以使用PDI来唯一标识一个进程，但PID旨在本地唯一，网络中的两个进程PID冲突几率很大，这时候我们需要另辟它径，我们知道IP层的ip地址可以唯一标示主机，而TCP层协议和端口号可以唯一标示主机的一个进程，这样哦我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程</span><br><span class="line">能够唯一标识网络中的进城后，他们就可以利用socket进行通信了</span><br><span class="line"><span class="comment"># 什么是socket ？</span></span><br><span class="line">我们常把socket翻译为套接字，socket实在应用层和传输层之间的一个抽象层，它把TCP/IP层复杂的操作抽象为几个简单的接口供应层调用已实现进程再网络中通信</span><br><span class="line">socket起源于UNIX，在Unix一切皆文件哲学的思想下，socket是一种  打开-读/写-关闭  模式的实现，服务器的客户端各自维护一个 文件  在建立连接打开后，可以向自己文件写入内容共对方读取，或者读取对方内容，通讯结束时关闭文件</span><br></pre></td></tr></table></figure>



<h2 id="子网划分概念"><a href="#子网划分概念" class="headerlink" title="子网划分概念"></a>子网划分概念</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">子网划分时通过借用ip地址的若干位主机位来充当子网地址的，从而将原来的网络分为若干个彼此隔离的子网实现的</span><br><span class="line"><span class="comment">#  注意：arp协议通过ip地址获取目标主机的mac地址这一过程使用的时广播的方式，这个广播地址就是通过子网地址与子网掩码计算而来的，只有计算出的这一子网内的主机才能收到这个arp广播包</span></span><br><span class="line"><span class="comment">#  子网划分与clan都可以做到隔离广播域，知识子网划分时三层隔离，vlan时二层隔离</span></span><br></pre></td></tr></table></figure>

<h2 id="子网划分步骤"><a href="#子网划分步骤" class="headerlink" title="子网划分步骤"></a>子网划分步骤</h2><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1.</span>确定要划分的子网数以及每个子网的主机数</span><br><span class="line"><span class="number">2.</span>求出子网数目对用的二进制的位数N及主机数目对应的二进制数的位数M</span><br><span class="line"><span class="number">3.</span>对该ip地址的元子网掩码，将其主机地址部分的前N位置<span class="number">1</span>（其余位置<span class="number">0</span>）或后M位置<span class="number">0</span>（其余位置<span class="number">1</span>）既得出该IP地址划分子网后的子网掩码</span><br></pre></td></tr></table></figure>

<h2 id="划分子网注意事项"><a href="#划分子网注意事项" class="headerlink" title="划分子网注意事项"></a>划分子网注意事项</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">1.在子网划分是不仅需要考虑目前需要，还应该了解将来需要多少子网和主机，子网掩码使用较多的主机位，可以得到更多子网，节约了ip地址资源，若将来需要更多的子网时，不用再重新分配ip地址，但每个子网的主机数量有限；反之，子网掩码使用较少的主机位，每个子网的主机数允许有更大的增长，但可用子网数有限。</span><br><span class="line">2.一般来说，一个网络中的节点数太多，网络会因为广播通信而饱和，所以网络中的主机数量的增长时有限的，也就是说，再条件允许的情况下，应将更多的主机位用于子网位。</span><br></pre></td></tr></table></figure>

<h2 id="为什么要子网划分"><a href="#为什么要子网划分" class="headerlink" title="为什么要子网划分"></a>为什么要子网划分</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">internet组织机构定义了物种IP地址，用于主机的有A,B,C三类地址。其中A类网络有<span class="number">126</span>个，每个A类网络可能有<span class="number">16</span>，<span class="number">777</span>，<span class="number">214</span>台主机，他们处于同一广播域。而在同一广播域中有这么多结点时不可能的，网络会因为广播通信而饱和，结果造成<span class="number">16</span>，<span class="number">777</span>，<span class="number">214</span>个地址大部分没有分配出去，形成了浪费。而另一方面，随着互联网应用的不断扩大，IP地址资源越来越少。为了实现更小的广播域帮更好的利用主机地址中的每一位，可以把基于类的IP网络进一步分为更小的网络，每个子网有路由器界定冰分配一个薪的子网网络地址，子网地址是借用基于类的网络地址的主机部分创建的。划分子网后，通过使用掩码，把子网隐藏起来，是的从外部看网络没有变化，这就是子网掩码</span><br><span class="line"></span><br><span class="line"><span class="comment">#  简单的说：一个公司不可能使用254个公网地址，A公司想用6个地址，B公司也想用6个地址，如果把这两个公司的地址都放在一个大网段里面，这两个公司的地址就能够直接互通</span></span><br></pre></td></tr></table></figure>

<h2 id="子网划分优点"><a href="#子网划分优点" class="headerlink" title="子网划分优点"></a>子网划分优点</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1.减少网络流量</span><br><span class="line">2.提高网络性能</span><br><span class="line">3.简化管理</span><br><span class="line">4.易于扩大地理范围</span><br></pre></td></tr></table></figure>

<h2 id="子网划分与VLAN"><a href="#子网划分与VLAN" class="headerlink" title="子网划分与VLAN"></a>子网划分与VLAN</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">子网划分完毕后，链接再同一台交换机上的不同子网的计算机，站在三层的角度属于不同的局域网，但是他们都是连接再同一台交互机上，站在二层角度，就是同一个局域网，说白了一个数据包的广播还是会g该交互机所有的端口，所以，子网划分通常与vlan配合使用</span><br><span class="line"><span class="comment">#  二层隔离和三层隔离</span></span><br><span class="line">两台计算机加入不同的交换机，称之为二层隔离</span><br><span class="line">子网地址不同，称之为三层隔离</span><br><span class="line">结论：</span><br><span class="line"><span class="number">1.</span>二层隔离与三层隔离需要保持一致</span><br><span class="line"><span class="number">2.</span>二层联通，三层可以隔离，这几台机器可能在连接同一个交换机，但是不在同一个局域网</span><br></pre></td></tr></table></figure>

<h2 id="VLAN"><a href="#VLAN" class="headerlink" title="VLAN"></a>VLAN</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">VLAN(Virtual LAN)，翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络，也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。</span><br><span class="line"></span><br><span class="line">简单来说，同一个VLAN中的用户间通信就和在一个局域网内一样，同一个VLAN中的广播只有VLAN中的 成员才能听到，而不会传输到其他的VLAN中去，从而控制不必要的广播风暴的产生。</span><br></pre></td></tr></table></figure>




            </div>

            <!-- Post Comments -->
            
    <!-- 使用 DISQUS_CLICK -->
<div id="disqus-comment">
    <div id="disqus_thread"></div>

<!-- add animation -->
<style>
	.disqus_click_btn {
            line-height: 30px;
            margin: 0;
            min-width: 50px;
            padding: 0 14px;
            display: inline-block;
            font-family: "Roboto", "Helvetica", "Arial", sans-serif;
            font-size: 14px;
            font-weight: 400;
            text-transform: uppercase;
            letter-spacing: 0;
            overflow: hidden;
            will-change: box-shadow;
            transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1), background-color .2s cubic-bezier(.4, 0, .2, 1), color .2s cubic-bezier(.4, 0, .2, 1);
            outline: 0;
            cursor: pointer;
            text-decoration: none;
            text-align: center;
            vertical-align: middle;
            border: 0;
            background: rgba(158, 158, 158, .2);
            box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12);
            color: #fff;
            background-color: #7EC0EE;
            text-shadow: 0
        }
</style>
	
<div class="btn_click_load" id="disqus_bt"> 
    <button class="disqus_click_btn">点击查看评论</button>
</div>

<!--
<script type="text/javascript">
$('.btn_click_load').click(function() {
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = 'http-miccall-tech'; // required: replace example with your forum shortname

    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
      var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
      dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();

    document.getElementById('disqus_bt').style.display = "none";
});
</script>
-->
<script type="text/javascript">
    var disqus_config = function () {
        this.page.url = 'https://gitee.com/AmeX/amelin-ting.git/2017/03/31/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/';  // Replace PAGE_URL with your page's canonical URL variable
        this.page.identifier = 'https://gitee.com/AmeX/amelin-ting.git/2017/03/31/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
    };
</script>

<script type="text/javascript">
    $('.btn_click_load').click(function() {  //click to load comments
        (function() { // DON'T EDIT BELOW THIS LINE
            var d = document;
            var s = d.createElement('script');
            s.src = '//http-miccall-tech.disqus.com/embed.js';
            s.setAttribute('data-timestamp', + new Date());
            (d.head || d.body).appendChild(s);
        })();
        $('.btn_click_load').css('display','none');
    });
</script>
</div>
<style>
    #disqus-comment{
        background-color: #eee;
        padding: 2pc;
    }
</style>


        </div>
        <!-- Copyright 版权 start -->
                <div id="copyright">
            <ul>
                <li>&copy;Powered By <a target="_blank" rel="noopener" href="https://hexo.io/zh-cn/" style="border-bottom: none;">hexo</a></li>
                <li>Design: <a target="_blank" rel="noopener" href="http://miccall.tech " style="border-bottom: none;">miccall</a></li>
            </ul>
            
                <span id="busuanzi_container_site_pv">本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
			
        </div>
    </div>
</body>



 	
</html>
